home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / os20 / util / ssl30.lha / ssmac.h < prev   
Text File  |  1993-11-07  |  7KB  |  589 lines

  1. ; Universal Macros for SS.Library, 3.0
  2. ; (c) 1993 SinSoft, PCSoft & MJSoft System Software
  3. ; ------------------------------------------------------------------------------
  4.  
  5. ; Global definitions
  6.  
  7. v    equr    a5
  8. s_W    equ    1
  9. s_b    equ    1
  10. s_w    equ    2
  11. s_l    equ    4
  12.  
  13. ; Initialization
  14.  
  15. SYSCNT    set    4
  16. execbase    equ    4
  17. _NOARP    equ    1
  18.     code
  19.  
  20.     opt    o+,w+
  21.  
  22. ; Includes
  23.  
  24.     include    "System.gs"        ; System symbols
  25.     include    "Macro:SSL/SS.i"    ; SS.library include
  26.  
  27. ; General macros
  28.  
  29. push    macro    *reg
  30.     move.l    \1,-(sp)
  31.     endm
  32.  
  33. pop    macro    *reg
  34.     move.l    (sp)+,\1
  35.     endm
  36.  
  37. mpush    macro    *reglist
  38.     movem.l    \1,-(sp)
  39.     endm
  40.  
  41. mpop    macro    *reglist
  42.     movem.l    (sp)+,\1
  43.     endm
  44.  
  45. rptr    macro    *label
  46. \@a    dc.w    \1-\@a
  47.     endm
  48.  
  49. ; Data definition macros
  50.  
  51. dv    macro    *.size,name
  52.     ifnc    '\0','b'
  53. SYSCNT    set    (SYSCNT+1)&$FFFE
  54.     endc
  55. \1    equ    SYSCNT
  56. SYSCNT    set    SYSCNT+s_\0
  57.     endm
  58.  
  59. dbuf    macro    *[.size],name,nritems
  60. SYSCNT    set    (SYSCNT+1)&$FFFE
  61. \1    equ    SYSCNT
  62. SYSCNT    set    SYSCNT+s_\0*\2
  63.     endm
  64.  
  65. ; Special data access macros
  66.  
  67. vpush    macro    *var
  68.     move.l    \1(v),-(sp)
  69.     endm
  70.  
  71. vpop    macro    *var
  72.     move.l    (sp)+,\1(v)
  73.     endm
  74.  
  75. get    macro    *.type,from,to
  76.     move.\0    \1(v),\2
  77.     endm
  78.  
  79. put    macro    *.type,from,to
  80.     move.\0    \1,\2(v)
  81.     endm
  82.  
  83. geta    macro    *from,to
  84.     lea    \1(v),\2
  85.     endm
  86.  
  87. clv    macro    *.type,dest
  88.     clr.\0    \1(v)
  89.     endm
  90.  
  91. tsv    macro    *.type,src
  92.     tst.\0    \1(v)
  93.     endm
  94.  
  95. ; Normal data access macros
  96.  
  97. negv    macro    *.size,to
  98.     neg.\0    \1(v)
  99.     endm
  100.  
  101. notv    macro    *.size,to
  102.     not.\0    \1(v)
  103.     endm
  104.  
  105. stv    macro    *.size,to
  106.     st    \1(v)
  107.     endm
  108.  
  109. clrv    macro    *.size,to
  110.     clr.\0    \1(v)
  111.     endm
  112.  
  113. seqv    macro    *.size,to
  114.     seq    \1(v)
  115.     endm
  116.  
  117. snev    macro    *.size,to
  118.     sne    \1(v)
  119.     endm
  120.  
  121. sccv    macro    *.size,to
  122.     scc    \1(v)
  123.     endm
  124.  
  125. scsv    macro    *.size,to
  126.     scs    \1(v)
  127.     endm
  128.  
  129. tstv    macro    *.size,from
  130.     tst.\0    \1(v)
  131.     endm
  132.  
  133. bchgv    macro    *bitnr,byte
  134.     bchg    \1,\2(v)
  135.     endm
  136.  
  137. bclrv    macro    *bitnr,byte
  138.     bclr    \1,\2(v)
  139.     endm
  140.  
  141. bsetv    macro    *bitnr,byte
  142.     bset    \1,\2(v)
  143.     endm
  144.  
  145. btstv    macro    *bitnr,byte
  146.     btst    \1,\2(v)
  147.     endm
  148.  
  149. subqv    macro    *.type,nr,byte
  150.     subq.\0    \1,\2(v)
  151.     endm
  152.  
  153. addqv    macro    *.type,nr,byte
  154.     addq.\0    \1,\2(v)
  155.     endm
  156.  
  157. vpea    macro    *var
  158.     pea    \1(v)
  159.     endm
  160.  
  161. eorv    macro    *.type,src,dest
  162.     eor.\0    \1,\2(v)
  163.     endm
  164.  
  165. divsv    macro    *src,dest
  166.     divs    \1,\2(v)
  167.     endm
  168.  
  169. divuv    macro    *src,dest
  170.     divu    \1,\2(v)
  171.     endm
  172.  
  173. mulsv    macro    *src,dest
  174.     muls    \1,\2(v)
  175.     endm
  176.  
  177. muluv    macro    *src,dest
  178.     mulu    \1,\2(v)
  179.     endm
  180.  
  181. addv    macro    *.type,src,dest
  182.     add.\0    \1,\2(v)
  183.     endm
  184.  
  185. vadd    macro    *.type,src,dest
  186.     add.\0    \1(v),\2
  187.     endm
  188.  
  189. andv    macro    *.type,src,dest
  190.     and.\0    \1,\2(v)
  191.     endm
  192.  
  193. vand    macro    *.type,src,dest
  194.     and.\0    \1(v),\2
  195.     endm
  196.  
  197. cmpv    macro    *.type,src,dest
  198.     cmp.\0    \1,\2(v)
  199.     endm
  200.  
  201. vcmp    macro    *.type,src,dest
  202.     cmp.\0    \1(v),\2
  203.     endm
  204.  
  205. movev    macro    *.type,src,dest
  206.     move.\0    \1,\2(v)
  207.     endm
  208.  
  209. vmove    macro    *.type,src,dest
  210.     move.\0    \1(v),\2
  211.     endm
  212.  
  213. orv    macro    *.type,src,dest
  214.     or.\0    \1,\2(v)
  215.     endm
  216.  
  217. vor    macro    *.type,src,dest
  218.     or.\0    \1(v),\2
  219.     endm
  220.  
  221. subv    macro    *.type,src,dest
  222.     sub.\0    \1,\2(v)
  223.     endm
  224.  
  225. vsub    macro    *.type,src,dest
  226.     sub.\0    \1(v),\2
  227.     endm
  228.  
  229. vlea    macro    *src,dest
  230.     lea    \1(v),\2
  231.     endm
  232.  
  233. vmovev    macro    *.type,src,dest
  234.     move.\0    \1(v),\2(v)
  235.     endm
  236.  
  237. movemv    macro    *.type,src,dest
  238.     movem.\0    \1,\2(v)
  239.     endm
  240.  
  241. vmovem    macro    *.type,src,dest
  242.     movem.\0    \1(v),\2
  243.     endm
  244.  
  245. ; Text macros
  246.  
  247. tbase    macro    *basereg
  248. t    equr    \1
  249.     section    TEXTS,DATA
  250. TEXTBASE
  251.     code
  252.     endm
  253.  
  254. dt    macro    *.type ([c][l]),[label,]text
  255.     section    TEXTS,DATA
  256.     ifne    NARG-1
  257. \1    dc.b    '\2'
  258.     elseif
  259.     dc.b    '\1'
  260.     endc
  261.     ifc    '\0','W'
  262.     dc.b    0
  263.     endc
  264.     ifc    '\0','l'
  265.     dc.b    10,0
  266.     endc
  267.     ifc    '\0','cl'
  268.     dc.b    10
  269.     endc
  270.     ifc    '\0','lc'
  271.     dc.b    10
  272.     endc
  273.     code
  274.     endm
  275.  
  276. gett    macro    *textlabel,areg
  277.     ifd    t
  278.     lea    \1-TEXTBASE(t),\2
  279.     elseif
  280.     lea    \1,\2
  281.     endc
  282.     endm
  283.  
  284. tlea    macro    *textlabel,areg
  285.     ifd    t
  286.     lea    \1-TEXTBASE(t),\2
  287.     elseif
  288.     lea    \1,\2
  289.     endc
  290.     endm
  291.  
  292. dtl    macro    *text,areg
  293.     dt.\0    \@a,<\1>
  294.     gett    \@a,\2
  295.     endm
  296.  
  297. ; System calls
  298.  
  299. call    macro    *[base,]name
  300.     ifeq    NARG-1
  301.     jsr    _LVO\1(a6)
  302.     elseif
  303.     ifc    '\1','exec'
  304.     move.l    4.w,a6
  305.     elseif
  306.     ifc    '\1','ss'
  307.     move.l    (v),a6
  308.     elseif
  309.     move.l    \1base(v),a6
  310.     endc
  311.     endc
  312.     jsr    _LVO\2(a6)
  313.     endc
  314.     endm
  315.  
  316. jump    macro    *[base,]name
  317.     ifeq    NARG-1
  318.     jmp    _LVO\1(a6)
  319.     elseif
  320.     ifc    '\1','exec'
  321.     move.l    4.w,a6
  322.     elseif
  323.     ifc    '\1','ss'
  324.     move.l    (v),a6
  325.     elseif
  326.     move.l    \1base(v),a6
  327.     endc
  328.     endc
  329.     jmp    _LVO\2(a6)
  330.     endc
  331.     endm
  332.  
  333. ; Universal start & finish
  334.  
  335. start    macro
  336.  
  337.     ifd    DEBUG    ; Stub for passing of arguments
  338.     opt    x+
  339. Debug__Init    mpush    d0/a0
  340.     move.l    4.w,a0
  341.     move.l    ThisTask(a0),a0
  342.     move.l    pr_GlobVec(a0),a2
  343.     move.l    pr_CIS(a0),a3
  344.     add.l    a3,a3
  345.     add.l    a3,a3
  346.     lea    fh_Buf(a3),a3
  347.     move.l    (a3)+,a1
  348.     add.l    a1,a1
  349.     add.l    a1,a1
  350.     clr.l    (a3)+
  351.     move.l    (sp)+,(a3)+
  352.     pop    a0
  353.     bra.s    1$
  354. 2$    move.b    (a0)+,(a1)+
  355. 1$    dbf    d0,2$
  356.     endc
  357.  
  358.     move.l    4.w,a6
  359.  
  360.     ifnd    _nowbstart
  361.     move.l    ThisTask(a6),a0
  362.     moveq    #0,d7
  363.     tst.l    pr_CLI(a0)
  364.     bne.s    Start__1
  365.     lea    pr_MsgPort(a0),a0
  366.     call    GetMsg
  367.     move.l    d0,d7
  368. Start__1
  369.     endc
  370.  
  371.     lea    ssname(pc),a1
  372.     call    OldOpenLibrary
  373.     tst.l    d0
  374.     bne.s    _ssok
  375.  
  376.     ifd    _GlobVec
  377.     move.l    $170(a2),a6
  378.     elseif
  379.     lea    _intname(pc),a1
  380.     call    OldOpenLibrary
  381.     tst.l    d0
  382.     beq.s    _enderr
  383.     move.l    d0,a6
  384.     endc
  385.     lea    _ssalert(pc),a0
  386.     moveq    #0,d0
  387.     moveq    #30,d1
  388.     call    DisplayAlert
  389.     ifnd    _GlobVec
  390.     move.l    a6,a1
  391.     call    exec,CloseLibrary
  392.     endc
  393. _enderr
  394.     ifnd    _nowbstart
  395.     tst.l    d7
  396.     beq.s    _endclierr
  397.     move.l    d7,a1
  398.     ifd    _GlobVec
  399.     move.l    4.w,a6
  400.     endc
  401.     call    ReplyMsg
  402. _endclierr
  403.     endc
  404.     moveq    #100,d0
  405.     rts
  406.  
  407.     ifnd    _GlobVec
  408. _intname    dc.b    'intuition.library'
  409.     endc
  410. _ssalert    dc.b    0,244,16,'You need '
  411. ssname    dc.b    'ss.library',0,0
  412.     even
  413.  
  414. _ssok    move.l    d0,a6
  415.     lea    _startstruc(pc),a0
  416.     call    StartupInit
  417.     ifd    t
  418.     lea    TEXTBASE,t
  419.     endc
  420. go
  421.     endm
  422.  
  423. clistart    macro
  424. _nowbstart    equ    1
  425.     start
  426.     endm
  427.  
  428. tags    macro
  429. _startstruc    dc.w    _SYSCNT,SSVer
  430.     endm
  431.  
  432. finish    macro
  433.     dc.w    0
  434. _SYSCNT    equ    SYSCNT
  435.     endm
  436.  
  437. ; Startup tags
  438.  
  439. wbconsole    macro
  440.     dc.w    sst_wbconsole
  441.     endm
  442.  
  443. template    macro    *template
  444.     dc.w    sst_template
  445.     dc.b    '\1',0
  446.     even
  447.     dc.w    SYSCNT
  448.     endm
  449.  
  450. defvar    macro    *varname
  451.     dc.w    sst_envvar
  452.     dc.b    '\1',0
  453.     even
  454.     endm
  455.  
  456. exitrout    macro    *routine
  457.     dc.w    sst_exitrout
  458. \@a    dc.w    \1-\@a
  459.     endm
  460.  
  461. errrout    macro    *routine
  462.     dc.w    sst_usererr
  463. \@a    dc.w    \1-\@a
  464.     endm
  465.  
  466. usrtrk    macro    *table
  467.     dc.w    sst_usertrk
  468. \@a    dc.w    \1-\@a
  469.     endm
  470.  
  471. library    macro    *name,version
  472.     dv.l    \1base
  473.     dc.w    sst_library
  474.     dc.b    '\1.library',0
  475.     even
  476.     dc.w    \2,\1base
  477.     endm
  478.  
  479. trylib    macro    *name,version
  480.     dv.l    \1base
  481.     dc.w    sst_trylib
  482.     dc.b    '\1.library',0
  483.     even
  484.     dc.w    \2,\1base
  485.     endm
  486.  
  487. cputype    macro    *min,max
  488.     dc.w    sst_cputype
  489.     dc.b    \1,\2
  490.     endm
  491.  
  492. fputype    macro    *min,max
  493.     dc.w    sst_fputype
  494.     dc.b    \1,\2
  495.     endm
  496.  
  497. sysver    macro    *min,max
  498.     dc.w    sst_sysver
  499.     dc.b    \1,\2
  500.     endm
  501.  
  502. diserr    macro    *flags
  503.     dc.w    sst_errors
  504.     dc.l    \1
  505.     endm
  506.  
  507. wbconname    macro    *name
  508.     dc.w    sst_wbconname
  509.     dc.b    '\1',0
  510.     even
  511.     endm
  512.  
  513. extrahelp    macro    *[text]
  514.     dc.w    sst_extrahelp
  515.     ifne    NARG
  516.     dc.b    '\1',0
  517.     even
  518.     endc
  519.     endm
  520.  
  521. endhelp    macro
  522.     dc.b    0
  523.     even
  524.     endm
  525.  
  526. ; ### Text output ###
  527.  
  528. write    macro    *text
  529.     dtl    <\1>,a0
  530.     call    ss,Puts
  531.     endm
  532.  
  533. writeln    macro    *text
  534.     dtl    <\1>,a0
  535.     call    ss,PutsNL
  536.     endm
  537.  
  538. printfs    macro    *[.L,]text
  539.     dtl.\0    <\1>,a0
  540.     move.l    sp,a1
  541.     call    ss,Printf
  542.     endm
  543.  
  544. printfv    macro    *[.L,]text,variable
  545.     dtl.\0    <\1>,a0
  546.     geta    \2,a1
  547.     call    ss,Printf
  548.     endm
  549.  
  550. printfr    macro    *[.L,]text,register
  551.     push    \2
  552.     dtl.\0    <\1>,a0
  553.     move.l    sp,a1
  554.     call    ss,Printf
  555.     pop    \2
  556.     endm
  557.  
  558. printfl    macro    *[.L,]text,reglist[,numreg]
  559.     mpush    \2
  560.     dtl.\0    <\1>,a0
  561.     move.l    sp,a1
  562.     call    ss,Printf
  563.     ifeq    NARG-3
  564.     ifgt    \3-2
  565.     lea    (\3*4)(sp),sp
  566.     elseif
  567.     addq.l    #4*\3,sp
  568.     endc
  569.     elseif
  570.     mpop    \2
  571.     endc
  572.     endm
  573.  
  574. err    macro    *text
  575.     dtl    <\1>,a0
  576.     jump    ss,ExitError
  577.     endm
  578.  
  579. doserr    macro    *text
  580.     dtl    <\1>,a0
  581.     jump    ss,DosError
  582.     endm
  583.  
  584. errc    macro    *.negcond,text
  585.     b\0.s    \@a
  586.     err    <\1>
  587. \@a
  588.     endm
  589.